home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Hot Mix 17
/
Hot Mix 17.iso
/
HM17_SGI
/
research
/
lib
/
testdemo.demo
< prev
next >
Wrap
Text File
|
1997-07-08
|
7KB
|
203 lines
; $Id: testdemo.demo,v 1.4 1996/12/18 00:12:36 ali Exp $
; IDL Demonstration script. A sequence of IDL statements just
; as they would be entered from the keyboard.
;
if !d.n_colors gt 2 then loadct,5 ;Color display?
;
; Simple Vector demonstration:
;
y = [0,1,2,3,4,5] ;Define a 6 element integer vector
plot,y,title='Simple Plot' ;Plot it
oplot,sqrt(y),color=151 ;overplot the square root
;
n = 100 ;Size of vectors
;
; n element vector demonstration:
;
x = findgen(n) ;n element floating array: 0, 1, 2, ..., n-1.
plot,x,title='Original Vector' ;Show it
y = sin(8*!pi/n * x) / exp(x/(n/2.)) ;Make a dampend sine wave
plot,y,title='Dampened Sine Wave'
for i=1,3 do oplot,y/(i+1),linestyle=i ;Show differing line styles
;
; Polygon filling:
;
xx = [x, reverse(x)] ;Vector of X values concatenated with reversed vector.
yy = [y, -reverse(y)] ;Same with Y but negate last half
for i=0,3 do polyfill,xx,yy/(i+1),color=255/(i+1) & end
;
; Example of spline interpolation.
;
window,2,title='Splines' ;make a new window
a = randomn(aa,12) ;12 element normal dist random vectors
plot,a,title='Spline Interpolation' ;simple plot
xx = findgen(121)/10. ;grid for spline interpolation, 121 pts from 0 to 12.0
yy = spline(findgen(12),a,xx) ;apply spline function to random points
oplot,xx,yy,thick = 2 ;overplot with double thick lines
;
; Gaussian fitting demo:
;
window,1,title='Gaussian Fitting'
x = findgen(50) ;5 element vector
v = randomu(aa,3)*[30,10,10]+[10,1,1] ;random #'s for center width and height.
z = v[2] * (exp(-((x-v[0])/v[1])^2) + 0.2*randomn(aa,50)) ;make signal
plot,z,title='Gaussian',psym=3
zz = gaussfit(x,z,a) ;Fit it using library function
oplot,zz,color=200
xyouts,2,.8*!y.crange[1],'!8y = a!I0!N e!A-z!E2!A/2!3',siz=2.5
print,'Center',v[0],', 1/e width',v[1],', Height',v[2]
print,'Calculated:'
print,'Center',a[1],', 1/e width',a[2],', Height',a[0]
;
;
; Frequency domain filter demonstration:
;
window,2,xs=700, ys=500, title='Low Pass Filtering'
!p.multi = [0,2,2] ;Gang plots, 2 by 2.
ynoise = y + randomn(aa,n)/4. ;Add noise to corrupt dampened sine wave
plot,ynoise, psym=3,title='Signal + Noise', color = 201
oplot,y ;Original signal as a line
;
z = abs(fft(y,1)) ;Original power spectrum
znoise = abs(fft(ynoise,1)) ;Corrupted Power spectrum
; Log Plot of power spectra:
; Plot original power spectum
plot_io,shift(z,n/2),title='Power Spectra',ytitle='Log Power'
; ;If color, fill original
if demo$color then polyfill,findgen(n),shift(z,n/2)
oplot, shift(znoise,n/2), psym=3, col = 201 ;Overplot noise
;
freq = findgen(n)/n ;Make a vector proportional to freq
freq = freq < (1.-freq) ;symmetrical about Nyquist freq
filter = 1./(1 + (freq/(4./n))^2) ;Low pass butterworth
plot, shift(filter,n/2), title='Butterworth Filter Function', color = 151
result = fft(filter * fft(ynoise, -1), 1) ;apply filter
plot, ynoise, psym=3, title='Filtered Result', color=201
oplot, result, col=151 ;filtered result
oplot, y, lines=2 ;original signal
!p.multi = 0 ;Reset standard plots
;
; Two dimensional array Section
;
loadct,3 ;red color tables
wset,0 & wshow,0 ;clean up things
if !d.n_colors le 2 then top = 255 else top = !d.n_colors-1 ;Max Col index
a=shift(dist(40),20,20) ;Make distance array
a=exp(-(a/8.)^2) ;Yes, the proverbial Gaussian.
;Demonstrate contour plot
contour, /follow, a, title='Contour Plot',c_line=[0,1,2,3]
threed,a,title='Stacked Row Plot' ;Show stacked row plot
window, 1, title='Second IDL Window',xsiz=480,ysiz=360 ;make a new window
surface, a, /save, /xst, /yst, bot=129, skirt=0. ;combine them
contour, a, /t3d, /noerase, zval=1.0, /xst, /yst, c_color=[101,151,201,251]
; More Demonstrations of Contouring:
a = randomu(seed, 6, 5) ;Make a 6x5 array of random numbers
; Show some contours
levels = findgen(9)/10. + .1
contour, a, level=levels, title='Simple Contour Plot'
b = min_curve_surf(a)
wset, 0
tek_color
contour, b, level=levels, title='Minimum Curvature Surface'
contour, b, /fill, level = levels, title='Polygon Fill', c_color=indgen(9)+2
contour, b, color = 0, /overplot, /downhill, levels = levels
wait, 1
if not demo$color then demo$done = 1 ;bail out now if can't display images.
;
; Image processing demo.
;
openr,1, demo$imagedir + 'cereb.dat',err=i ;Open image file
if i ne 0 then begin print,'Image files not found' & demo$done=1 & end
file = assoc(1, bytarr(512,512)) ;contains 512 by 512 byte images
a = file[0] ;read 1st image
loadct, 3
wset, 0 ;use original image
erase ;clean out display
tv, a ;display image
h = histogram(a) ;get pixel distribution
wset, 1 ;other window
plot, h[1:*], title='Pixel Distribution Histogram'
wset, 0
h_eq_ct, a ;show histogram equalized image
xyouts, 310, 480, /noclip, 'Histogram Equalized Image', /dev
;
; Image subtraction. The first image is before Iodine dye injection,
; and the second image is after.
;
b = bytscl(fix(a) - file[1],top=top) ;subtract 2nd image
close, 1 ;done with file
stretch ;restore normal color table
tv, b ;show difference image
xyouts, 310, 480, /noclip, 'Mask Subtraction Image', /dev
b = hist_equal(b, top = top) ;histogram equalize pixels
tv,b ;Show it
shades = rebin(b,64,64) ;shades for later use (4d display)
height = rebin(a,64,64)-50>0 ;Heights
;
; Unsharp masking
;
b = bytscl(fix(a) - smooth(a, 5),top=top) ;subtract smoothed orig from smoothed
stretch ;restore color tables
tv, b ;show diff
xyouts, 330, 490, /noclip, 'Unsharp Masking', /dev
h_eq_ct,b ;Histogram equalize it
;
; 2D Fourier Filtering
;
openr,1, demo$imagedir + 'abnorm.dat' ;Open image file
a=bytarr(64,64) ;define array
readu,1,a ;read image
close,1 ;done with file
erase & stretch ;clean out display
tvscl,rebin(a,256,256),0 ;show it
xyouts,0,480,/dev,/nocl,'Original Image'
b = fft(a,1) ;forward transform
z = alog(abs(b)) ;Log power spectrum
tv,rebin(shift(bytscl(z,top=top),32,32),256,256),1 ;show it
xyouts,256,480,/dev,/nocl,'Power Spectrum'
freq = dist(64) ;make a butterworth low pass filter
filter = 1./(1 + (freq/5)^2) ;cutoff = 5 cycles/image.
tvscl,rebin(bytscl(shift(filter,32,32),top=top),256,256),2 ;show it
xyouts,0,224,/dev,/nocl,'Butterworth Filter Function'
result = fft(filter * b,-1) ;filter & retransform
tv,rebin(bytscl(result,top=top),256,256),3 ;show result
xyouts,256,224,/dev,/nocl,'Low Pass Filtered'
;
; Combined view of image:
;
window,2,title='Combined Display',xsize=400, ysize=400
show3,smooth(a,5),/interp,sscale=2 ;show image 3 ways
;
; Shaded view of image:
;
window,1,title='Shaded Surfaces',xsize=480, ysize=400
shade_surf,rebin(a,32,32) ;Make a shaded surface
;
; 4D view of brain and circulation:
;
; The elevation is the X-ray density, and the shading shows the
; blood perfusion.
;
wset,0
shade_surf,height, shades=shades, ax=70,/xst,/yst ;show it
surface,rebin(height, 32,32),ax=70,col=0,/xst,/yst,/noer ;overprint lines
loadct,15 ;Load a pretty color table
xyouts,10,480,/dev,/nocl,font=0,'Elevation = X-Ray Density'
xyouts,10,450,/dev,/nocl,font=0,'Shading = Blood perfusion'
;
;
; ALL DONE!!